package indi.kider.server.bill.service;

import indi.kider.common.model.bill.*;
import indi.kider.server.bill.model.BalanceCycle;
import pers.vankid.common.model.base.CoreException;

import java.util.List;

/**
 * Created by shixj on 2018/5/4.
 */
public interface BalanceTaskService {
    /**
     * 注册任务（指定归属，指定结算日期）
     * @param taskRegist
     * @return
     */
    void regist(TaskRegist taskRegist)throws Exception ;

    /**
     * 更新水电读数
     * 更新结算日期
     * 更新执行状态
     *
     * @param balanceTask
     * @return
     */
    BalanceTask update(BalanceTask balanceTask);

    /**
     * 设置初始读数
     * @param balanceTask
     * @return
     */
    @Deprecated
    BalanceTask setInitalReading(BalanceTask balanceTask);

    BalanceTask queryOne(BalanceTask balanceTask);

    List<RentTask> getRentTask(RentTask rentTask);
    List<BalanceTask> query(BalanceTask balanceTask);
    /**
     * 获取上一个任务
     * @param balanceTask
     * @return
     */
    BalanceTask getPreTask(BalanceTask balanceTask) ;

    /**
     * 获取结算周期信息
     * @param balanceTask
     * @return
     * @throws Exception
     */
    BalanceCycle getBalanceCycle(BalanceTask balanceTask) throws Exception ;
    /**
     * 生成并保存下一个任务
     * @param balanceTask
     * @return
     */
    BalanceTask saveSufTask(BalanceTask balanceTask) ;
    /**
     * 退租 结算产生账单
     */
    boolean leaseBalance(BillLeaseCancel billLeaseCancel);
    /**
     * 注销任务
     */
    void unregistTask(Long rentId);

    /**
     * 手动抄表处理异常任务
     */
    Bill resovleErrorTask(BalanceTask task)throws Exception;
}
